package com.cp.admin.api.utils;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.cp.admin.modular.system.model.SysConfig;
import com.cp.admin.modular.system.service.ISysConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.multipart.MultipartFile;

/**
 * Created by yy on 2018-02-08.
 * desc:
 */
@Slf4j
@Configuration
public class UtilsBean {
    @Autowired
    private ISysConfigService sysConfigService;

    @Autowired
    private StringRedisTemplate redisTemplate;

    private static final String SYS_CONFIG_KEY_DATA_PATH = "DATA_PATH";//服务器文件保存地址
    private static final String SYS_CONFIG_KEY_VISIT_PATH = "VISIT_PATH";//服务器文件访问地址
    /**
     * 保存文件到文件地址
     * @param files     上传的文件
     * @param filePath  文件相对于系统文件地址(运维指定的存文件地址)的地址
     * @param fileName  文件名，不包括后缀
     * @return  保存到数据库的文件路径和地址（filePath+fileName+.+后缀名）
     */
    public String saveFile(MultipartFile files, String filePath, String fileName){
        if(files == null || files.getSize() == 0){
            return null;
        }
        //获取系统配置的保存文件的地址
        SysConfig sysConfigVO = getSysConfig(SYS_CONFIG_KEY_DATA_PATH);     //服务器文件保存地址
        //保存文件
        String dataPath = sysConfigVO.getValue();//系统文件地址

        SysConfig sysConfigVisit = getSysConfig(SYS_CONFIG_KEY_VISIT_PATH); //服务器文件访问地址
        String visitPath = sysConfigVisit.getValue();//文件访问地址
        //获取文件后缀名
        String originalFilename = files.getOriginalFilename();//原文件名
        //.文件后缀
        String fileSuffix = originalFilename.substring(originalFilename.lastIndexOf("."),originalFilename.length());
        //完整文件名
        fileName = fileName+fileSuffix;
        //访问路径
        String savePath = visitPath+filePath+fileName;
        //文件完整路径地址
        filePath = dataPath+filePath;
        try {
            byte[] bytes = files.getBytes();
            FileUtils.uploadFile(bytes,filePath,fileName);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("-----------------> 保存{}文件失败",fileName);
            return null;
        }
        return savePath;
    }

    /**
     * 获取系统默认配置
     * @param configKey 配置的可以
     * @return  配置信息
     */
    public SysConfig getSysConfig(String configKey){
        //获取系统配置的保存文件的地址
        Wrapper wrapper = new EntityWrapper();
        wrapper.eq("config_key", "abcd");
        wrapper.eq("status", 0);
        SysConfig sysConfig = sysConfigService.selectOne(wrapper);
        if(sysConfig == null){
            return null;
        }
        return sysConfig;
    }

}
